/*
 * CadastrarContaReceberAssociado.java
 *
 * Created on 11/03/2009, 14:38:56
 * Copyright Jaime Junior
 */
package Adecot.Financeiro;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.jsfcl.data.DefaultSelectedData;
import com.icesoft.faces.component.jsfcl.data.DefaultSelectionItems;
import com.icesoft.faces.component.jsfcl.data.PopupBean;
import com.icesoft.faces.component.jsfcl.data.SelectInputDateBean;
import com.icesoft.faces.component.panelpopup.PanelPopup;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import javax.faces.FacesException;
import Adecot.RequestBean1;
import Adecot.SessionBean1;
import Adecot.ApplicationBean1;
import Controller.AssociadoBO;
import Controller.ContaReceberAssociadoBO;
import Controller.Facade.IceDecorator;
import Controller.Facade.ValidaFacade;
import Model.Associado;
import javax.faces.context.FacesContext;
import javax.faces.convert.DoubleConverter;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import Model.ContaReceberAssociado;
import java.util.Date;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 */
public class CadastrarContaReceberAssociado extends AbstractPageBean {
   // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

   private int __placeholder;
   private boolean auxAlterar=false;
   private ContaReceberAssociado temp = new ContaReceberAssociado();
   /**
    * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
    * This method is automatically generated, so any user-specified code inserted
    * here is subject to being replaced.</p>
    */

   private void _init() throws Exception {
   }
    public boolean isAuxAlterar() {
        return auxAlterar;
    }

    public void setAuxAlterar(boolean auxAlterar) {
        this.auxAlterar = auxAlterar;
    }

    public ContaReceberAssociado getTemp() {
        return temp;
    }

    public void setTemp(ContaReceberAssociado temp) {
        this.temp = temp;
    }


   private DefaultSelectedData associadoSelecionado = new DefaultSelectedData();

   public DefaultSelectedData getAssociadoSelecionado() {
      return associadoSelecionado;
   }

   public void setAssociadoSelecionado(DefaultSelectedData dsd) {
      this.associadoSelecionado = dsd;
   }
   private DefaultSelectionItems associados = new DefaultSelectionItems();

   public DefaultSelectionItems getAssociados() {
      return associados;
   }

   public void setAssociados(DefaultSelectionItems dsi) {
      this.associados = dsi;
   }
   private SelectInputDateBean dataPagamentoSelecionada = new SelectInputDateBean();

   public SelectInputDateBean getDataPagamentoSelecionada() {
      return dataPagamentoSelecionada;
   }

   public void setDataPagamentoSelecionada(SelectInputDateBean sidb) {
      this.dataPagamentoSelecionada = sidb;
   }
   private HtmlSelectOneMenu comboAssociado = new HtmlSelectOneMenu();

   public HtmlSelectOneMenu getComboAssociado() {
      return comboAssociado;
   }

   public void setComboAssociado(HtmlSelectOneMenu hsom) {
      this.comboAssociado = hsom;
   }
   private SelectInputDate campoDataDespesa = new SelectInputDate();

   public SelectInputDate getCampoDataDespesa() {
      return campoDataDespesa;
   }

   public void setCampoDataDespesa(SelectInputDate sid) {
      this.campoDataDespesa = sid;
   }
   private HtmlInputText campoTipoDespesa = new HtmlInputText();

   public HtmlInputText getCampoTipoDespesa() {
      return campoTipoDespesa;
   }

   public void setCampoTipoDespesa(HtmlInputText hit) {
      this.campoTipoDespesa = hit;
   }
   private HtmlInputText campoValorDespesa = new HtmlInputText();

   public HtmlInputText getCampoValorDespesa() {
      return campoValorDespesa;
   }

   public void setCampoValorDespesa(HtmlInputText hit) {
      this.campoValorDespesa = hit;
   }
   private PopupBean panelPopup1Bean = new PopupBean();

   public PopupBean getPanelPopup1Bean() {
      return panelPopup1Bean;
   }

   public void setPanelPopup1Bean(PopupBean pb) {
      this.panelPopup1Bean = pb;
   }
   private PopupBean panelPopup1Bean1 = new PopupBean();

   public PopupBean getPanelPopup1Bean1() {
      return panelPopup1Bean1;
   }

   public void setPanelPopup1Bean1(PopupBean pb) {
      this.panelPopup1Bean1 = pb;
   }
   private PopupBean panelPopup1Bean2 = new PopupBean();

   public PopupBean getPanelPopup1Bean2() {
      return panelPopup1Bean2;
   }

   public void setPanelPopup1Bean2(PopupBean pb) {
      this.panelPopup1Bean2 = pb;
   }
   private PopupBean panelPopup1Bean3 = new PopupBean();

   public PopupBean getPanelPopup1Bean3() {
      return panelPopup1Bean3;
   }

   public void setPanelPopup1Bean3(PopupBean pb) {
      this.panelPopup1Bean3 = pb;
   }
   private PanelPopup painelSair = new PanelPopup();

   public PanelPopup getPainelSair() {
      return painelSair;
   }

   public void setPainelSair(PanelPopup pp) {
      this.painelSair = pp;
   }
   private PanelPopup painelConsulta = new PanelPopup();

   public PanelPopup getPainelConsulta() {
      return painelConsulta;
   }

   public void setPainelConsulta(PanelPopup pp) {
      this.painelConsulta = pp;
   }
   private PanelPopup painelAviso = new PanelPopup();

   public PanelPopup getPainelAviso() {
      return painelAviso;
   }

   public void setPainelAviso(PanelPopup pp) {
      this.painelAviso = pp;
   }
   private PanelPopup painelMensagem = new PanelPopup();

   public PanelPopup getPainelMensagem() {
      return painelMensagem;
   }

   public void setPainelMensagem(PanelPopup pp) {
      this.painelMensagem = pp;
   }
   private HtmlOutputText msgMensagemResultado = new HtmlOutputText();

   public HtmlOutputText getMsgMensagemResultado() {
      return msgMensagemResultado;
   }

   public void setMsgMensagemResultado(HtmlOutputText hot) {
      this.msgMensagemResultado = hot;
   }
   private DoubleConverter doubleConverter1 = new DoubleConverter();

   public DoubleConverter getDoubleConverter1() {
      return doubleConverter1;
   }

   public void setDoubleConverter1(DoubleConverter dc) {
      this.doubleConverter1 = dc;
   }
   private HtmlInputText campoValorPago = new HtmlInputText();

   public HtmlInputText getCampoValorPago() {
      return campoValorPago;
   }

   public void setCampoValorPago(HtmlInputText hit) {
      this.campoValorPago = hit;
   }
    private DefaultSelectedData consultaAssociadoSelecionado = new DefaultSelectedData();

    public DefaultSelectedData getConsultaAssociadoSelecionado() {
        return consultaAssociadoSelecionado;
    }

    public void setConsultaAssociadoSelecionado(DefaultSelectedData dsd) {
        this.consultaAssociadoSelecionado = dsd;
    }
    private DefaultSelectionItems consultaAssociados = new DefaultSelectionItems();

    public DefaultSelectionItems getConsultaAssociados() {
        return consultaAssociados;
    }

    public void setConsultaAssociados(DefaultSelectionItems dsi) {
        this.consultaAssociados = dsi;
    }
    private DefaultSelectedData consultaContaSelecionada = new DefaultSelectedData();

    public DefaultSelectedData getConsultaContaSelecionada() {
        return consultaContaSelecionada;
    }

    public void setConsultaContaSelecionada(DefaultSelectedData dsd) {
        this.consultaContaSelecionada = dsd;
    }
    private DefaultSelectionItems consultaContas = new DefaultSelectionItems();

    public DefaultSelectionItems getConsultaContas() {
        return consultaContas;
    }

    public void setConsultaContas(DefaultSelectionItems dsi) {
        this.consultaContas = dsi;
    }
    private HtmlSelectOneMenu comboConsultaConta = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboConsultaConta() {
        return comboConsultaConta;
    }

    public void setComboConsultaConta(HtmlSelectOneMenu hsom) {
        this.comboConsultaConta = hsom;
    }
    private HtmlSelectOneMenu comboConsultaAssociado = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboConsultaAssociado() {
        return comboConsultaAssociado;
    }

    public void setComboConsultaAssociado(HtmlSelectOneMenu hsom) {
        this.comboConsultaAssociado = hsom;
    }
    private HtmlCommandButton button1 = new HtmlCommandButton();

    public HtmlCommandButton getButton1() {
        return button1;
    }

    public void setButton1(HtmlCommandButton hcb) {
        this.button1 = hcb;
    }

   // </editor-fold>
   /**
    * <p>Construct a new Page bean instance.</p>
    */
   public CadastrarContaReceberAssociado() {
   }

   /**
    * <p>Callback method that is called whenever a page is navigated to,
    * either directly via a URL, or indirectly via page navigation.
    * Customize this method to acquire resources that will be needed
    * for event handlers and lifecycle methods, whether or not this
    * page is performing post back processing.</p>
    *
    * <p>Note that, if the current request is a postback, the property
    * values of the components do <strong>not</strong> represent any
    * values submitted with this request.  Instead, they represent the
    * property values that were saved for this view when it was rendered.</p>
    */
   @Override
   public void init() {
      // Perform initializations inherited from our superclass
      super.init();
      // Perform application initialization that must complete
      // *before* managed components are initialized
      // TODO - add your own initialiation code here

      // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
      // Initialize automatically managed components
      // *Note* - this logic should NOT be modified
      try {
         _init();
      } catch (Exception e) {
         log("CadastrarContaReceberAssociado Initialization Failure", e);
         throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
      }
      limparCampos();
   // </editor-fold>
   // Perform application initialization that must complete
   // *after* managed components are initialized
   // TODO - add your own initialization code here
   }

   public void limparCampos() {
      FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ContaReceberAssociado");
      ContaReceberAssociado novo=new ContaReceberAssociado();
      painelSair.setRendered(false);
      painelConsulta.setRendered(false);
      painelAviso.setRendered(false);
      painelMensagem.setRendered(false);
      setBean("ContaReceberAssociado", novo);
      campoDataDespesa.resetValue();
      campoTipoDespesa.resetValue();
      campoValorDespesa.resetValue();
      associados.clear();
      setAssociados(new IceDecorator(AssociadoBO.class).montaCombo());
      associados.add(0, new SelectItem(0, "Selecione"));
      comboAssociado.setValue(0);
   }

   public void modificaEstadoCampo(boolean h) {
      campoDataDespesa.setDisabled(h);
      campoTipoDespesa.setDisabled(h);
      campoValorDespesa.setDisabled(h);

   }

   /**
    * <p>Callback method that is called after the component tree has been
    * restored, but before any event processing takes place.  This method
    * will <strong>only</strong> be called on a postback request that
    * is processing a form submit.  Customize this method to allocate
    * resources that will be required in your event handlers.</p>
    */
   @Override
   public void preprocess() {
   }

   /**
    * <p>Callback method that is called just before rendering takes place.
    * This method will <strong>only</strong> be called for the page that
    * will actually be rendered (and not, for example, on a page that
    * handled a postback and then navigated to a different page).  Customize
    * this method to allocate resources that will be required for rendering
    * this page.</p>
    */
   @Override
   public void prerender() {
   }

   /**
    * <p>Callback method that is called after rendering is completed for
    * this request, if <code>init()</code> was called (regardless of whether
    * or not this was the page that was actually rendered).  Customize this
    * method to release resources acquired in the <code>init()</code>,
    * <code>preprocess()</code>, or <code>prerender()</code> methods (or
    * acquired during execution of an event handler).</p>
    */
   @Override
   public void destroy() {
   }

   /**
    * <p>Retornar uma referência para o Bean de dados limitados.</p>
    *
    * @retorna uma referência para o bean de dados limitados
    */
   protected CadastrarContaReceberEmpresa getContaEmpresa() {
      return (CadastrarContaReceberEmpresa) getBean("Financeiro$CadastrarContaReceberEmpresa");
   }

   /**
    * <p>Retornar uma referência para o Bean de dados limitados.</p>
    *
    * @retorna uma referência para o bean de dados limitados
    */
   protected RequestBean1 getRequestBean1() {
      return (RequestBean1) getBean("RequestBean1");
   }

   /**
    * <p>Retornar uma referência para o Bean de dados limitados.</p>
    *
    * @retorna uma referência para o bean de dados limitados
    */
   protected SessionBean1 getSessionBean1() {
      return (SessionBean1) getBean("SessionBean1");
   }

   /**
    * <p>Retornar uma referência para o Bean de dados limitados.</p>
    *
    * @retorna uma referência para o bean de dados limitados
    */
   protected ApplicationBean1 getApplicationBean1() {
      return (ApplicationBean1) getBean("ApplicationBean1");
   }

   /**
    * <p>Retornar uma referência para o Bean de dados limitados.</p>
    *
    * @retorna uma referência para o bean de dados limitados
    */
   protected CadastrarContaPagar getFinanceiro$CadastrarContaPagar() {
      return (CadastrarContaPagar) getBean("Financeiro$CadastrarContaPagar");
   }

   public void desabilitaCampos(){
        campoDataDespesa.setDisabled(true);
        campoTipoDespesa.setDisabled(true);
        campoValorDespesa.setDisabled(true);
        campoValorPago.setDisabled(true);
        comboAssociado.setDisabled(true);
   }

   public void habilitarCampos(){
        campoDataDespesa.setDisabled(false);
        campoTipoDespesa.setDisabled(false);
        campoValorDespesa.setDisabled(false);
        campoValorPago.setDisabled(false);
        comboAssociado.setDisabled(false);
   }

   public String botaoSair_action() {
      painelSair.setRendered(true);
      return null;
   }

   public String botaoSairSim_action() {

      return "menu";
   }

   public String botaoSairNao_action() {
      painelSair.setRendered(false);
      return null;
   }

   public String botaoConsultar_action() {
      painelConsulta.setRendered(true);
      try{
          consultaAssociados.clear();
          setConsultaAssociados(new IceDecorator(AssociadoBO.class).montaCombo());
          consultaAssociados.add(0, new SelectItem(0, "Selecione"));
          comboConsultaAssociado.setValue(0);
          consultaContas.clear();
          consultaContas.add(0, new SelectItem(0, "Selecione"));
          comboConsultaConta.setValue(0);
      }catch(Exception e){
          
      }

      return null;
   }

   public String botaoConsultaCancelar_action() {
      painelConsulta.setRendered(false);
      return null;
   }

   public String botaoConsultaOk_action() throws Exception {
       if(Integer.parseInt(comboConsultaConta.getValue().toString())==0){
           painelMensagem.setRendered(true);
           msgMensagemResultado.setValue("Selecione uma Despesa Valida");
           return null;
       }
            ContaReceberAssociado conta = (ContaReceberAssociado) new IceDecorator(ContaReceberAssociadoBO.class).retornaObjeto("codReceberAssociado", Integer.parseInt(comboConsultaConta.getValue().toString()));
            campoDataDespesa.setValue(conta.getDataDespesa());
            comboAssociado.setValue(comboConsultaAssociado.getValue());
            campoTipoDespesa.setValue(conta.getDescricao());
            campoValorDespesa.setValue(conta.getValorTotal());
            campoValorPago.setValue(conta.getValorPago());
            painelConsulta.setRendered(false);
            setTemp(conta);
            desabilitaCampos();
      return null;
   }

   public String botaoAvisoSim_action() {
      painelAviso.setRendered(false);
      return null;
   }

   public String botaoAvisoNao_action() {
      painelAviso.setRendered(false);
      painelConsulta.setRendered(false);

      return null;
   }

   public String botaoMensagemOk_action() {
      painelMensagem.setRendered(false);
      return null;
   }

   public String botaoCadastrar1_action() {
       ContaReceberAssociado conta= (ContaReceberAssociado) getBean("ContaReceberAssociado");
       try{
            if(auxAlterar==false){

                conta.setDataDespesa(new ValidaFacade().consertarData((Date)campoDataDespesa.getValue()));
                System.out.println(conta.getCodReceberAssociado());

                new IceDecorator(ContaReceberAssociadoBO.class).salvar(conta);
                limparCampos();
                msgMensagemResultado.setValue("Operação realizada com sucesso!");
                painelMensagem.setRendered(true);
            }else{
                conta.setAssociado(getTemp().getAssociado());
                new IceDecorator(ContaReceberAssociadoBO.class).excluir(getTemp());
                new IceDecorator(ContaReceberAssociadoBO.class).salvar(conta);
                setTemp(new ContaReceberAssociado());
                setAuxAlterar(false);
                limparCampos();
                msgMensagemResultado.setValue("Operação realizada com sucesso!");
                painelMensagem.setRendered(true);

            }
       }catch(Exception e){
           
            msgMensagemResultado.setValue("Erro ao realizar operação");
            painelMensagem.setRendered(true);
       }
      return null;
   }

   public String botaoAlterar_action() {
      setAuxAlterar(true);
      habilitarCampos();
      selecionaAssociado();
      return null;
   }

   public String botaoNovo_action() {
      habilitarCampos();
      limparCampos();
      return null;
   }

   public String botaoLimpar_action() {
      habilitarCampos();
      limparCampos();
      return null;
   }

   public void comboAssociado_processValueChange(ValueChangeEvent vce) {
      selecionaAssociado();
   }

   public void selecionaAssociado() {
      FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("Associado");
      Associado associado;
      try {
         associado= (Associado) new IceDecorator(AssociadoBO.class).retornaObjetoCodigo("codAssociado",
                 Integer.parseInt(comboAssociado.getValue().toString()));
         ContaReceberAssociado conta = (ContaReceberAssociado) getBean("ContaReceberAssociado");
         conta.setAssociado(associado);
         setBean("ContaReceberAssociado", conta);
      } catch (Exception ex) {
         FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("Associado");
      
      }
   }

    public void comboConsultaAssociado_processValueChange(ValueChangeEvent vce) {
        try {
            setConsultaContas(new IceDecorator(ContaReceberAssociadoBO.class).montaComboContaReceber(Integer.parseInt(comboConsultaAssociado.getValue().toString())));
            System.out.println(comboConsultaAssociado.getValue().toString());
            consultaContas.add(0, new SelectItem(0, "Selecione"));
            comboConsultaConta.setValue(0);
            
        } catch (Exception ex) {

        }

    }

    public String button1_action() throws Exception {
        if((getTemp().getCodReceberAssociado()==0)||(getTemp().equals(null))){
            msgMensagemResultado.setValue("Consulte primeiro uma despesa para depois exclui-la");
            painelMensagem.setRendered(true);
        }else{
            new IceDecorator(ContaReceberAssociadoBO.class).excluir(getTemp());
            setTemp(new ContaReceberAssociado());
            limparCampos();
            habilitarCampos();
            msgMensagemResultado.setValue("Despesa excluida");
            painelMensagem.setRendered(true);
        }
        return null;
    }
}

